/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.modelo.clases;

import com.ipartek.formacion.gestformwww.modelo.beans.TipoCurso;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import com.ipartek.formacion.gestformwww.modelo.interfaces.ITipoCursoDAO;
import java.sql.*;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Aitor, Víctor y Álvaro
 */
public class SQLServerTipoCursoDAO implements ITipoCursoDAO {

    private static ResourceBundle rb;

    public SQLServerTipoCursoDAO() {
        rb = ResourceBundle.getBundle("com.ipartek.formacion.gestformwww.controlador.excepciones");
    }

    /**
     * Método que crea los tipos de cursos.
     * @author
     * @param rs: ResultSet obtenido de una consulta SQL.
     * @return Devuelve un tipo de curso de la clase tipoCurso
     */
    private TipoCurso crearTipoCurso(ResultSet rs) throws GestorFormacionExcepcion {
        TipoCurso tipoCurso = new TipoCurso();

        try {
            tipoCurso.setTipCurId(rs.getInt("TipCurId"));
            tipoCurso.setTipCurDescr(rs.getString("TipCurDescr"));
            tipoCurso.setTipCurObserv(rs.getString("TipCurObserv"));
            tipoCurso.setTipCurLogo(rs.getString("TipCurLogo"));
            tipoCurso.setTipCurEmpresa(rs.getBoolean("TipCurEmpresa"));
            tipoCurso.setTipCurPlantilla(rs.getString("TipCurPlantilla"));
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerTipoCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
        }

        return tipoCurso;
    }

    /**
     * Método que busca un tipo de curso concreto para ser establecido.
     * @author
     * @param tipCurId: Identificador del tipo de curso.
     * @return Devuelve el tipo de curso elegido.
     */
    public TipoCurso buscarTipoCurso(int tipCurId) throws GestorFormacionExcepcion {
        TipoCurso tipoCurso = null;
        Connection con = null;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerTipoCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }

        try {
            PreparedStatement stmt = con.prepareStatement("SELECT TipCurId, TipCurDescr, TipCurObserv, TipCurLogo, TipCurEmpresa, TipCurPlantilla FROM TIPOCURSO WHERE TipCurId=?");
            stmt.setInt(1, tipCurId);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                tipoCurso = crearTipoCurso(rs);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerTipoCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }
        
        return tipoCurso;
    }

    /**
     * Método que lista los tipos de cursos disponibles.
     * @author
     * @return Devuelve una lista de tipos de curso.
     */
    public ArrayList<TipoCurso> listarTipoCurso() throws GestorFormacionExcepcion {
        ArrayList<TipoCurso> lTipoCurso = new ArrayList();
        Connection con = null;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerTipoCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }

        try {
            PreparedStatement stmt = con.prepareStatement("SELECT TipCurId, TipCurDescr, TipCurObserv, TipCurLogo, TipCurEmpresa, TipCurPlantilla FROM TIPOCURSO");
            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                lTipoCurso.add(crearTipoCurso(rs));
            }
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerTipoCursoDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }

        return lTipoCurso;
    }
}